package org.ph.share.lock.test.thread2;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;

/**
 * 探究park、unpark
 * 似于 Thread.sleep(),让当前线程阻塞以等待通知，并且不会浪费CPU资源。
 * 该方法是可重入的，也就是说，如果多次调用 park() 方法，只有被对应数量的 unpark() 调用才能唤醒该线程。
 *
 * @author Hush.
 * @since 2023/1/18 19:47
 */
@Slf4j
public class Thread6 {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {

            log.info("before park");
            LockSupport.park();
            log.info("after park");
        }, "t1");
        t1.start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        log.info("before unpark");
        LockSupport.unpark(t1);
        log.info("after unpark");
    }
}
